#include "choixconso.h"
#include "ui_choixconso.h"

ChoixConso::ChoixConso(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ChoixConso)
{
    ui->setupUi(this);

    db = QSqlDatabase::database("microtmp");


    // On initialise le model
    model = new QStandardItemModel(0,3,this);
    QSqlQuery q(db);
    q.prepare("SELECT * FROM consos ORDER BY id");
    q.exec();
    int i = 0;
    while(q.next()){
        model->insertRow(i);
        model->setData(model->index(i,0),q.value(0).toInt());
        model->setData(model->index(i,1),q.value(2).toString());
        model->setData(model->index(i,2),0);
        model->setHeaderData(i,Qt::Vertical,"F"+QString::number(i)+" -> ");
        i++;
    }

    // On met un qtedelegate sur la quantité
    QteDelegate *qd = new QteDelegate(model);

    ui->listDispo->setModel(model);
    ui->listDispo->hideColumn(0);
    ui->listDispo->setItemDelegateForColumn(2,qd);
    ui->listDispo->resizeColumnsToContents();

    // On vide la liste des consos
    liste.clear();

}

ChoixConso::~ChoixConso()
{
    delete ui;
}

void ChoixConso::reset()
{
    // On remet les qte à 0
    for(int i= 0;i<model->rowCount();i++){
        model->setData(model->index(i,2),0);
    }
    // On vide la liste des consos
    liste.clear();
}

void ChoixConso::keyPressEvent(QKeyEvent *event)
{
    //On récupère la touche
    int key = event->key() - Qt::Key_F1;

    //Si c'est entre F1 et F12
    if(key >= 0 && key < 12 && key < model->rowCount()){
        event->accept();

        if(event->modifiers() == Qt::ControlModifier){

            // Lors de l'appui sur CTRL on retire 1 à la conso (si > 0)
            if(model->index(key,2).data().toInt()>0)
                model->setData(model->index(key,2),model->index(key,2).data().toInt() - 1);

        } else if (event->modifiers() == Qt::NoModifier){

            // Si pas d'appui sur CTRL, on ajoute 1
            model->setData(model->index(key,2),model->index(key,2).data().toInt() + 1);
        }
    }

    // Appui sur ECHAP : Signal de fin
    if(event->key() == Qt::Key_Escape){
        event->accept();
        emit finBucquage();
    }

    // Appui sur Enter
    if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter){
        event->accept();

        // On génère la liste
        for(int i=0 ;i< model->rowCount();i++){
            for(int j=0 ;j<model->index(i,2).data().toInt(); j++){
                liste.append(model->index(i,0).data().toInt());
            }
        }
        // On envoie le signal
        emit bucquer(liste);
    }


}
